package com.sg.dto.biz.app.req;

import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;

/**
 * @desc ImplementCalcTargetScoreComReqDto
 * @使用场景
 */
@Data
public class ImplementCalcTargetScoreComReqDto
        extends BaseDto
        implements Serializable {

    /**
     * 归属周期ID
     */
    @NotNull(message = "归属周期ID不能为空")
    @ApiModelProperty("归属周期ID")
    private String cycleId;

    /**
     * 周期开始时间
     */
    @NotNull(message = "周期开始时间不能为空")
    @ApiModelProperty("周期开始时间")
    private Date cycleStartTime;

    /**
     * 周期结束时间
     */
    @NotNull(message = "周期结束时间不能为空")
    @ApiModelProperty("周期结束时间")
    private Date cycleEndTime;

    /**
     * 更新周期ID
     */
    @NotNull(message = "更新周期ID不能为空")
    @ApiModelProperty("更新周期ID")
    private String updateCycleId;

    /**
     * 最近可循环周期类型编码
     */
    @ApiModelProperty("最近可循环周期类型编码")
    private String nextCyclePeriod;

    /**
     * 权重分值
     */
    @NotNull(message = "权重分值不能为空")
    @ApiModelProperty("权重分值")
    private Double weightScore;

    /**
     * 主树目标周期ID
     */
    @NotNull(message = "主树目标周期ID不能为空")
    @ApiModelProperty("主树目标周期ID")
    private String mainTreeTargetCycleId;

    /**
     * 被评对象类型编码 EVA_PORTRAIT:评价画像 EVA_OBJECT:评价对象 FLEVEL_OBJ_TASK_DUTY_DEPT:一级部门目标任务责任部门 OKR_SUBJECT_DEPT:OKR责任主体部门 OKR_SUBJECT_PERSONAL:OKR责任主体个人
     */
    @NotNull(message = "被评对象类型编码不能为空")
    @ApiModelProperty("被评对象类型编码")
    private String evaObjTypeCode;

    /**
     * 归属内容表主键ID
     */
    @NotNull(message = "归属内容表主键ID不能为空")
    @ApiModelProperty("归属内容表主键ID")
    private String entityId;

    /**
     * 父子中过程周期类型 PARENT_CYCLE:父周期 MID_CYCLE:中期 SUB_CYCLE:子周期 PROCESS_CYCLE:过程周期
     */
    @NotNull(message = "父子中过程周期类型不能为空")
    @ApiModelProperty("父子中过程周期类型")
    private String parentSubMidCycleType;

    /**
     * 被评对象目标周期标识
     */
    @NotNull(message = "被评对象目标周期标识不能为空")
    @ApiModelProperty("被评对象目标周期标识")
    private String evaObjTargetCycleCode;

    /**
     * 关联目标内容类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标
     */
    @NotNull(message = "关联目标内容类型编码不能为空")
    @ApiModelProperty("关联目标内容类型编码")
    private String targetCycleContentTypeCode;

    /**
     * 数据归属内容表主键ID
     */
    @NotNull(message = "数据归属内容表主键ID不能为空")
    @ApiModelProperty("数据归属内容表主键ID")
    private String belongToContentId;

    /**
     * 冗余指标业务类型 NUMBER_GROWTH:数量增长型 NUMBER_DECLINE:数量降幅型 PERCENTAGE_GROWTH:百分比增长型 PERCENTAGE_DECLINE:百分比降幅型 PROGRESS:进度型 RATIO_GROWTH:比率增长型 RATIO_DECLINE:比率降幅型 SUBJECTIVE_QUALITATIVE:主观定性
     */
    @ApiModelProperty("冗余指标业务类型")
    private String targetValueType;

    /**
     * 冗余评价模板ID
     */
    @NotNull(message = "冗余评价模板ID不能为空")
    @ApiModelProperty("冗余评价模板ID")
    private String evaluationTemplateId;

    /**
     * 数据对象批次标识
     */
    @NotNull(message = "数据对象批次标识不能为空")
    @ApiModelProperty("数据对象批次标识")
    private String dataObjectBatchCode;

    /**
     * 本目标归属周期的计算周期五模型 LAST_CYCLE:末级周期 MID_OF_PROCESS_CYCLE:中间周期 SUB_CYCLE:子周期 MID_CYCLE:中期 PARENT_CYCLE:父周期
     */
    @NotNull(message = "本目标归属周期的计算周期五模型不能为空")
    @ApiModelProperty("本目标归属周期的计算周期五模型")
    private String standardDataCalcCycleModel;

    /**
     * 与末级周期同体类型分析结果 SUB_CYCLE_SAME_AS_LAST_CYCLE_TYPE:子周期与末级周期同体 MID_OF_PROCESS_SAME_AS_LAST_CYCLE_TYPE:过程中间期与末级周期同体 NORMAL:正常
     */
    @NotNull(message = "与末级周期同体类型分析结果不能为空")
    @ApiModelProperty("与末级周期同体类型分析结果")
    private String subCycleIsLastCycle;

    /**
     * 目标得分计算公式 CALC:自己计算得分 CLONE_FROM_EVA_SUBJECT:当前树克隆主树得分
     */
    @NotNull(message = "目标得分计算公式不能为空")
    @ApiModelProperty("目标得分计算公式")
    private String calcOrClone;

    /**
     * 目标得分本级与下级组合变量 RANK_CALC:计算本级得分 DOWN_CALC:计算下级得分 RANK_AND_DOWN_CALC:计算本级+下级得分
     */
    @ApiModelProperty("目标得分本级与下级组合变量")
    private String reportScoreCountFormula;

    /**
     * 目标得分主客观变量 SUBJECTIVE:主观得分 OBJECTIVE:客观得分 SUBJECTIVE_AND_OBJECTIVE:主观得分+客观得分
     */
    @ApiModelProperty("目标得分主客观变量")
    private String reportScoreSubAndObjVariables;

}
